package logica.pessoa;

import logica.util.Endereco;

/**
 * Agencia, herda de Pessoa Juridica e representa uma filial/sede da LocaLisa, para a qual veiculos podem apontar por
 * composicao, significando que eles estao localizados nessa agencia.
 * @author Guilherme Santos G. Baptista
 */

public class Agencia extends PessoaJuridica{
	
	private Gerente gerenteDaAgencia;
	
	/**
	 * Construtor de Agencia
	 * @param nome String - O nome de fantasia da Agencia
	 * @param telefone String - O telefone da Agencia
	 * @param email String - O email da Agencia
	 * @param endereco Endereco - O endereco da Agencia
	 * @param cnpj String - O CNPJ da Agencia
	 * @param razaoSocial String - A razao social da Agencia (o nome de uma pessoa fisica)
	 * @param inscricaoEstadual String - A inscricao estadual da Agencia
	 * @param gerenteDaAgencia Gerente - O gerente responsavel pela Agencia, <i>null</i> se ainda nao houver gerente
	 * @throws Exception Excecao caso algum dos parametros seja invalido.
	 */
	public Agencia(String nome, String telefone, String email, Endereco endereco, String cnpj, String razaoSocial, String inscricaoEstadual, Gerente gerenteDaAgencia ) throws Exception{
		super(nome, telefone, email, endereco, cnpj, razaoSocial, inscricaoEstadual);

		this.gerenteDaAgencia = gerenteDaAgencia;

	}

	/**
	 * Retorna o gerente da Agencia, se houver.
	 * @return Gerente - O gerente da Agencia
	 * @throws Exception Excecao caso nao haja gerente na Agencia
	 */
	public Gerente getGerente() throws Exception{
		if ( this.gerenteDaAgencia == null ){
			throw new Exception("Nao ha gerente nessa Agencia!");
		}
		return gerenteDaAgencia;
	}
	
	/**
	 * Determina um novo gerente para a Agencia.
	 * @param novoGerente Gerente - O novo gerente responsavel
	 * @throws Exception Excecao caso o novo gerente ja seja o gerente da Agencia, ou caso novo gerente seja nulo
	 */
	public void setGerente(Gerente novoGerente) throws Exception{
		if ( novoGerente == null ){
			throw new Exception("Nao pode passar um gerente nulo!");
		}
		if ( novoGerente != null && this.gerenteDaAgencia.equals(novoGerente) ){
			throw new Exception("Esse ja eh o gerente atual!");
		}
		this.gerenteDaAgencia = novoGerente;
	}
	
	@Override
	/**
	 * Retorna uma string que representa a Agencia.
	 */
	public String toString() {
		
		String retorno = "\nAgencia"+" "+this.getNome()+"\n"+
		"________________________"+"\n"+
		"\nCNPJ: "+this.getCNPJ()+"\t"+"Razao Social: "+this.getRazaoSocial()+"\n\t"+"Inscricao Estadual: "+this.getInscricaoEstadual()+"\n"+
		"Email: "+this.getEmail()+"\n"+
		"Telefone: "+this.getTelefone()+"\n";
		
		try{
			retorno+="Gerente Responsavel: "+this.getGerente().getNome()+"\nEmail do Gerente: "+this.getGerente().getEmail()+"\n";
		}
		catch(Exception e){
			retorno+="Sem Gerente Responsavel.\n";
		}
		retorno+="_________________________";
		
		return retorno;
	}
}